//引入axios
import { helperNameMap } from "@vue/compiler-core"
import axios from "axios"
import { ElMessageBox } from 'element-plus'
import router from "@/router"
import NProgress from "nprogress"
//配置axios
let http=axios.create({
    //基础地址
    baseURL:'/api',
    //超时设置
    timeout:1000*10,
    //是否携带凭据
    withCredentials:true
})

//配置拦截器

//请求拦截器,所有的axios请求都会被拦截器拦截可以通过拦截器添加额外的配置
http.interceptors.request.use(config=>{
    //先获取token
    NProgress.start()
    let token=sessionStorage.getItem('myx-token')
    config.headers.authorization=token
    return config
})

//响应拦截器，所有的axios响应都会被响应拦截器拦截，可以对拦截的响应进行额外的配置
http.interceptors.response.use(config=>{
    NProgress.done()
    //config是每个请求响应的结果，所有的请求返回的结果都需要经过这道门，才能到组件那
//    console.log('config===',config)
    if(config.data.state){
        //响应正常
        return config
    }else{

        //不需要弹窗提示的路径
        let excludePaths=["/sms/send","/order/query_order_status"]
        //如果excludePaths中不包含当前的响应路径，那么不需要弹窗
        if(!excludePaths.includes(config.config.url)){
          //响应了错误
          ElMessageBox.alert(config.data.msg,'错误提示',{type:'error'})
        }
        //判断登入失效的情况 10022（登入状态过期） 1004（token失效了）前后端通俗约定状态码 并不是http状态码
        if(config.data.code=='10022' || config.data.code=='1004'){
            //退到登入页，然后清掉token
            sessionStorage.removeItem('myx-token')
            router.push('/login')
            //刷新页面，清掉缓存
            location.reload()
        }
       
        return Promise.reject(config.data.msg)
    }
   
})
export default http;